import { defineStore } from "pinia";
import { ref } from "vue";

import { getHistoryList, deleteHistoryChat } from "@/api/wlxz/history"; // 导入API方法

// 生成唯一ID的函数
function generateUniqueId() {
  const timestamp = Date.now().toString(36);
  const randomStr = Math.random().toString(36);
  return `${timestamp}-${randomStr}`;
}

export const useHistoryStore = defineStore("history", () => {
  // 当前对话ID
  const currentChatId = ref("");
  // 历史对话列表
  const chatHistory = ref([]);
  // 存储所有历史对话
  const historyDialogs = ref({});
  // 处理后的历史对话列表
  const processedHistory = ref([]);

  // 创建新对话
  const createNewChat = () => {
    const newChatId = generateUniqueId();
    currentChatId.value = newChatId;
    return newChatId;
  };

  // 添加历史记录
  const addHistory = (historyData) => {
    // 先保存到历史记录
    chatHistory.value.unshift(historyData);
    // 重新获取最新的历史对话列表
    fetchHistoryList();
  };

  // 获取历史对话列表
  const fetchHistoryList = async () => {
    try {
      const res = await getHistoryList();
      if (res.code === 200) {
        historyDialogs.value = res.data;
        // 处理每个对话组
        const processedData = Object.entries(res.data).map(
          ([chatId, messages]) => {
            // 按时间排序消息
            const sortedMessages = [...messages].sort(
              (a, b) => new Date(a.time).getTime() - new Date(b.time).getTime()
            );
            // 使用第一条消息的时间和内容
            const firstMessage = sortedMessages[0];

            return {
              chatId,
              title: firstMessage?.ask || "新对话",
              firstMessageTime: firstMessage?.time,
              messages: sortedMessages,
            };
          }
        );
        // 按照第一条消息的时间升序排序
        processedHistory.value = processedData.sort((a, b) => {
          if (!a.firstMessageTime) return 1;
          if (!b.firstMessageTime) return -1;
          return b.firstMessageTime.localeCompare(a.firstMessageTime);
        });
      }
    } catch (error) {
      console.error("获取历史对话失败:", error);
    }
  };
  // 清空历史对话
  const clearHistory = () => {
    historyDialogs.value = {};
    processedHistory.value = [];
    currentChatId.value = "";
    chatHistory.value = [];
  };

  // 获取指定chatId的对话组
  const getChatHistory = (chatId) => {
    return historyDialogs.value[chatId] || [];
  };

  const removeHistoryChat = async (chatId) => {
    try {
      const res = await deleteHistoryChat(chatId);
      if (res.code === 200) {
        // 删除成功，刷新列表
        fetchHistoryList();
      }
    } catch (error) {
      console.error("删除历史对话失败:", error);
    }
  };
  return {
    currentChatId, //当前对话ID
    chatHistory, //历史对话列表
    historyDialogs, //存储所有历史对话
    processedHistory, //处理后的历史对话列表
    createNewChat, //创建新对话
    addHistory, //添加历史记录
    fetchHistoryList, //获取历史对话列表
    clearHistory, //清空历史对话
    getChatHistory, //获取指定对话的历史记录
    removeHistoryChat, //删除指定对话
  };
});
